using A2.ERP.IDAL;

namespace A2.ERP.DALFactory
{
    /// <summary>
    /// 数据会话层，负责数据操作实列的创建，然后业务层通过调用数据会话层（DBSession），获取相应的数据操作类实列，
    /// 因此。Dbsession就是一个工厂类。解决了业务层与数据访问层之间的解耦（模块一的实现依赖于模块二，更改模块二后，模块一也得更改，那么二者就有耦合。）
    /// </summary>
    public class DBSession : IDBSession
    {

        //DbContext DB = new RaiseEntities();

        /// <summary>
        /// 完成数据库ef上下文对象的创建
        /// </summary>
        public DbContext DB
        {
            get
            {
                return DbContextFactory.CreateDbContext();
            }
        }

        //实例化对象，方便调用
    		private It_AccountsDAL _t_AccountsDAL;

        public It_AccountsDAL t_AccountsDAL
        {
            get
            {
                if (t_AccountsDAL == null)
                {
                    t_AccountsDAL = DALAbastr.CreateDAL<t_AccountsDAL>() as It_AccountsDAL;
                }

                return t_AccountsDAL;
            }
            set
            {
                t_AccountsDAL = value;
            }
        }
			private It_UserDAL _t_UserDAL;

        public It_UserDAL t_UserDAL
        {
            get
            {
                if (t_UserDAL == null)
                {
                    t_UserDAL = DALAbastr.CreateDAL<t_UserDAL>() as It_UserDAL;
                }

                return t_UserDAL;
            }
            set
            {
                t_UserDAL = value;
            }
        }
	

        /// <summary>
        /// 保存数据 一个业务中可能涉及到多个表的操作，那么我们希望先将要操作的数据追加到一个ef上下文中，
        /// 在统一操作提交到数据库里，一次链接完成了多次操作，提高了代码性能      
        /// </summary>
        /// <returns></returns>
        public bool SaveChanges()
        {
            return DB.SaveChanges() > 0;
        }
    }
}


